package ArrayListPlus;

import java.util.*;

public class SetListCode {
    public static void main(String[] args) {
//        Set<String> set = new HashSet<String>();
        /*
         * 1.添加重复数据会添加失败 并返回false状态值
         * 2.存的数据不一定是数据顺序
         * 3.
         * */
//        boolean r1 = set.add("张三");
//        boolean r2 = set.add("张三");
//        boolean r3 = set.add("李四");
//        boolean r4 = set.add("王五");

//        System.out.println(r1);
//        System.out.println(r2);
//        System.out.println(set);

        /**
         * 迭代器遍历
         * */

//        Iterator<String> it = set.iterator();
//        while(it.hasNext()){
//            System.out.println(it.next());
//        }

        /**
         * 增强for循环遍历
         * */
//        for(String s:set){
//            System.out.println(s);
//        }


        /**
         * lambda表达式遍历
         * */
//        set.forEach(s-> System.out.println(s));

        /**
         * 哈希值
         * 1.如果没有重写hash方法 不同对象计算出来的hash值是不同的
         * 2.如果重写了hash方法 不同对象只要属性相同 则计算出来的hash值是相同的
         * 3.但是在小部分情况下，不同属性值或者不同地址计算出来的哈希值也有可能一样
         * */
//        Student stu1 = new Student("zhangsan", 23);
//        Student stu2 = new Student("zhangsan", 23);
//        System.out.println(stu1.hashCode());
//        System.out.println(stu2.hashCode());

//        Set<String> set = new HashSet<String>();

        /**
         * treeSet集合
         * 特点：可排序 去重 无索引
         * 基于红黑树数据结构实现的 性能较高
         * 基础数据类型会使用自然排序
         * */

//        Student s1 = new Student("张三", 24);
//        Student s2 = new Student("李四", 22);
//        Student s3 = new Student("王五", 23);
//
//        Set<Student> set = new TreeSet<Student>();
//        set.add(s1);
//        set.add(s2);
//        set.add(s3);
//        System.out.println(set);


        /**
         * 比较器排序
         * 1.如果没有指定比较器 则会使用自然排序
         * 2.如果指定了比较器 则会使用比较器排序 自定义属性必须指定比较器
         * 3.自然排序的比较器规则也可以重写
         * */
//        TreeSet<String> ts = new TreeSet<>(
//                (o1, o2) -> {
//                    int i = o1.length() - o2.length();
//                    i = i == 0 ? o1.compareTo(o2) : i;
//                    return i;
//                }
//        );
//        ts.add("A");
//        ts.add("dcsad");
//        ts.add("d23444");
//        ts.add("sad");
//        ts.add("eg");
//        ts.add("f");
//        System.out.println(ts);
    }

}
